From 53c862bd80f17347a002923c55bcef3e0b915e41 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Sun, 4 May 2025 14:52:58 +0300 Subject: [PATCH] fixup redis option parsing Signed-off-by: Vasiliy Tolstov --- .github/workflows/job_sync.yml | 47 ++++++++++++++----------------- go.mod | 10 +++---- go.sum | 26 ++++++++++------- options.go | 6 ++++ redis.go | 51 ++++++++++++++++++++++++++-------- 5 files changed, 88 insertions(+), 52 deletions(-) diff --git a/.github/workflows/job_sync.yml b/.github/workflows/job_sync.yml index 7f4af85..1abcb42 100644 --- a/.github/workflows/job_sync.yml +++ b/.github/workflows/job_sync.yml @@ -3,58 +3,53 @@ name: sync on: schedule: - cron: '*/5 * * * *' - push: - branches: [ master, v3, v4 ] - paths-ignore: - - '.github/**' - - '.gitea/**' # Allows you to run this workflow manually from the Actions tab workflow_dispatch: jobs: sync: - if: env.GITHUB_ACTION == 0 + if: github.server_url != 'https://github.com' runs-on: ubuntu-latest steps: - name: init run: | git config --global user.email "vtolstov " git config --global user.name "github-actions[bot]" - echo "machine git.unistack.org login vtolstov password ${{ secrets.TOKEN_GITEA }}" | tee -a /root/.netrc - echo "machine github.com login vtolstov password ${{ secrets.TOKEN_GITHUB }}" | tee -a /root/.netrc + echo "machine git.unistack.org login vtolstov password ${{ secrets.TOKEN_GITEA }}" >> /root/.netrc + echo "machine github.com login vtolstov password ${{ secrets.TOKEN_GITHUB }}" >> /root/.netrc - name: sync master run: | - git clone --depth=10 --branch master --single-branch ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} repo + git clone --filter=blob:none --filter=tree:0 --branch master --single-branch https://github.com/${GITHUB_REPOSITORY} repo cd repo - git remote add --no-tags --fetch --track master upstream https://github.com/${GITHUB_REPOSITORY} - git pull --rebase upstream master - git push upstream master --progress - git merge --allow-unrelated-histories "upstream/master" - git push origin master --progress + git remote add --no-tags --fetch --track master upstream ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} + git diff --stat master upstream/master + git pull -v --rebase upstream master + git push upstream master -v --progress + git push origin master -v --progress cd ../ rm -rf repo - name: sync v3 run: | - git clone --depth=10 --branch v3 --single-branch ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} repo + git clone --filter=blob:none --filter=tree:0 --branch v3 --single-branch https://github.com/${GITHUB_REPOSITORY} repo cd repo - git remote add --no-tags --fetch --track v3 upstream https://github.com/${GITHUB_REPOSITORY} - git pull --rebase upstream v3 - git push upstream v3 - git merge --allow-unrelated-histories "upstream/v3" - git push origin v3 --progress + git remote add --no-tags --fetch --track v3 upstream ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} + git diff --stat v3 upstream/v3 + git pull -v --rebase upstream v3 + git push upstream v3 -v --progress + git push origin v3 -v --progress cd ../ rm -rf repo - name: sync v4 run: | - git clone --depth=10 --branch v4 --single-branch ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} repo + git clone --filter=blob:none --filter=tree:0 --branch v4 --single-branch https://github.com/${GITHUB_REPOSITORY} repo cd repo - git remote add --no-tags --fetch --track v4 upstream https://github.com/${GITHUB_REPOSITORY} - git pull --rebase upstream v4 - git push upstream v4 - git merge --allow-unrelated-histories "upstream/v4" - git push origin v4 --progress + git remote add --no-tags --fetch --track v4 upstream ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} + git diff --stat v4 upstream/v4 + git pull -v --rebase upstream v4 + git push upstream v4 -v --progress + git push origin v4 -v --progress cd ../ rm -rf repo diff --git a/go.mod b/go.mod index 10a9fc7..08631ab 100644 --- a/go.mod +++ b/go.mod @@ -5,9 +5,9 @@ go 1.22.0 toolchain go1.24.2 require ( - github.com/redis/go-redis/extra/rediscmd/v9 v9.7.0 - github.com/redis/go-redis/v9 v9.7.0 - go.unistack.org/micro/v4 v4.1.6 + github.com/redis/go-redis/extra/rediscmd/v9 v9.8.0 + github.com/redis/go-redis/v9 v9.8.0 + go.unistack.org/micro/v4 v4.1.10 ) require ( @@ -17,8 +17,8 @@ require ( github.com/google/go-cmp v0.6.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/matoous/go-nanoid v1.5.1 // indirect - github.com/spf13/cast v1.7.1 // indirect + github.com/spf13/cast v1.8.0 // indirect go.unistack.org/micro-proto/v4 v4.1.0 // indirect - google.golang.org/protobuf v1.36.3 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 3f0daa1..8ae464f 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -22,20 +24,24 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/matoous/go-nanoid v1.5.1 h1:aCjdvTyO9LLnTIi0fgdXhOPPvOHjpXN6Ik9DaNjIct4= github.com/matoous/go-nanoid v1.5.1/go.mod h1:zyD2a71IubI24efhpvkJz+ZwfwagzgSO6UNiFsZKN7U= -github.com/redis/go-redis/extra/rediscmd/v9 v9.7.0 h1:BIx9TNZH/Jsr4l1i7VVxnV0JPiwYj8qyrHyuL0fGZrk= -github.com/redis/go-redis/extra/rediscmd/v9 v9.7.0/go.mod h1:eTg/YQtGYAZD5r3DlGlJptJ45AHA+/G+2NPn30PKzik= -github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E= -github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/redis/go-redis/extra/rediscmd/v9 v9.8.0 h1:/A+PnpT6ufTUt/6YPXiZlCRoyyfEnDag5WGrEK8Gq0I= +github.com/redis/go-redis/extra/rediscmd/v9 v9.8.0/go.mod h1:FGO4BNjl5TfH9U771826GIW2Ul4pOEqHAN+0xjfw+dU= +github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI= +github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= -github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.8.0 h1:gEN9K4b8Xws4EX0+a0reLmhq8moKn7ntRlQYgjPeCDk= +github.com/spf13/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.unistack.org/micro-proto/v4 v4.1.0 h1:qPwL2n/oqh9RE3RTTDgt28XK3QzV597VugQPaw9lKUk= go.unistack.org/micro-proto/v4 v4.1.0/go.mod h1:ArmK7o+uFvxSY3dbJhKBBX4Pm1rhWdLEFf3LxBrMtec= -go.unistack.org/micro/v4 v4.1.6 h1:sYLpe1Vd8/lDwddtV0BLTvJ+i+fllXAS4fZngT1wKZ4= -go.unistack.org/micro/v4 v4.1.6/go.mod h1:lr3oYED8Ay1vjK68QqRw30QOtdk/ffpZqMFDasOUhKw= -google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU= -google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +go.unistack.org/micro/v4 v4.1.10 h1:ElmFSEQmLlG42D7tzMHQhx3d5paU7LWLvE8mpui3V0U= +go.unistack.org/micro/v4 v4.1.10/go.mod h1:b4dr7RFlbpSfSsKCva9UuX4zLtkYQteEK+Uuac39qJE= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/options.go b/options.go index 3aed042..8008168 100644 --- a/options.go +++ b/options.go @@ -26,6 +26,12 @@ func UniversalConfig(c *goredis.UniversalOptions) store.Option { return store.SetOption(universalConfigKey{}, c) } +type failoverConfigKey struct{} + +func FailoverConfig(c *goredis.FailoverOptions) store.Option { + return store.SetOption(failoverConfigKey{}, c) +} + var ( labelHost = "redis_host" labelName = "redis_name" diff --git a/redis.go b/redis.go index d9b6dad..4fd98a2 100755 --- a/redis.go +++ b/redis.go @@ -707,10 +707,7 @@ func (r *Store) configure(opts ...store.Option) error { universalOptions.MaxIdleConns = o.MaxIdleConns universalOptions.ConnMaxIdleTime = o.ConnMaxIdleTime universalOptions.ConnMaxLifetime = o.ConnMaxLifetime - - if o.TLSConfig != nil { - universalOptions.TLSConfig = o.TLSConfig - } + universalOptions.TLSConfig = o.TLSConfig } if o, ok := r.opts.Context.Value(clusterConfigKey{}).(*goredis.ClusterOptions); ok { @@ -742,22 +739,54 @@ func (r *Store) configure(opts ...store.Option) error { universalOptions.MaxIdleConns = o.MaxIdleConns universalOptions.ConnMaxIdleTime = o.ConnMaxIdleTime universalOptions.ConnMaxLifetime = o.ConnMaxLifetime - if o.TLSConfig != nil { - universalOptions.TLSConfig = o.TLSConfig - } + universalOptions.TLSConfig = o.TLSConfig + } + + if o, ok := r.opts.Context.Value(failoverConfigKey{}).(*goredis.FailoverOptions); ok { + universalOptions.ClientName = o.ClientName + universalOptions.MasterName = o.MasterName + universalOptions.Addrs = o.SentinelAddrs + universalOptions.Dialer = o.Dialer + universalOptions.OnConnect = o.OnConnect + universalOptions.Username = o.Username + universalOptions.Password = o.Password + universalOptions.SentinelUsername = o.SentinelUsername + universalOptions.SentinelPassword = o.SentinelPassword + + universalOptions.ReadOnly = o.ReplicaOnly + universalOptions.RouteByLatency = o.RouteByLatency + universalOptions.RouteRandomly = o.RouteRandomly + + universalOptions.MaxRetries = o.MaxRetries + universalOptions.MinRetryBackoff = o.MinRetryBackoff + universalOptions.MaxRetryBackoff = o.MaxRetryBackoff + + universalOptions.DialTimeout = o.DialTimeout + universalOptions.ReadTimeout = o.ReadTimeout + universalOptions.WriteTimeout = o.WriteTimeout + universalOptions.ContextTimeoutEnabled = o.ContextTimeoutEnabled + + universalOptions.PoolFIFO = o.PoolFIFO + + universalOptions.PoolSize = o.PoolSize + universalOptions.PoolTimeout = o.PoolTimeout + universalOptions.MinIdleConns = o.MinIdleConns + universalOptions.MaxIdleConns = o.MaxIdleConns + universalOptions.ConnMaxIdleTime = o.ConnMaxIdleTime + universalOptions.ConnMaxLifetime = o.ConnMaxLifetime + universalOptions.TLSConfig = o.TLSConfig } if o, ok := r.opts.Context.Value(universalConfigKey{}).(*goredis.UniversalOptions); ok { universalOptions = o - if o.TLSConfig != nil { - universalOptions.TLSConfig = o.TLSConfig - } } } if len(r.opts.Addrs) > 0 { universalOptions.Addrs = r.opts.Addrs - } else { + } + + if len(universalOptions.Addrs) == 0 { universalOptions.Addrs = []string{"127.0.0.1:6379"} }