•  


WIP - fix #2141 - cluster redirect if client closed by scorpionknifes · Pull Request #2701 · redis/node-redis · GitHub
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP - fix #2141 - cluster redirect if client closed #2701

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

scorpionknifes
Copy link

@scorpionknifes scorpionknifes commented Feb 8, 2024

Description

Here is a rough attempt to resolve issues described in #2141 (I'm not an expert with TS and would like someone to take over this PR)

createCluster is currently unable to update slots when slots are out of date (when a master node goes down and a replica takes over)
This causes the client to throw ClientClosedError forever until the application is restarted.

This PR takes inspiration from https://github.com/redis/go-redis

  • Whenever a command is executed, we check if the state has been last updated 10s ago reference
  • Use concept of state struct to make lazy loading easier reference

Related: #2141 (comment)

Known issues

Do not use isolated - commandOptions ; this breaks the client forever, the duplicated client from using this command option would keep using old node addresses and cause Connection timeout on each reconnection. This PR attempts to make changes only to the cluster client and won't make any fixes to this issue (this issue already exists prior this PR)
e.g.

await
 client
.
xRead
(

    commandOptions
(
{

        isolated
: 
true

    }
)
,

    [

        {

            key
: 
key
,

            id
:
'0-0'

        }

    ]
,

    {

        COUNT
: 
100
,

        BLOCK
: 
0

    }

)
;

Try it out

For those interested in trying this client out you can install it using the following:

# 
I
'm using pnpm
"pnpm": {
  "overrides": {
    "@redis/client": "npm:@scorpionknifes/redis-client@^1.6.0"
  }
},

It is available here: https://www.npmjs.com/package/@scorpionknifes/redis-client
Reminder - this is a draft and don't use this for production.

Testing

I've tested this against docker, k8s
Writing tests for these is almost impossible cause it relies on simulating a Redis master going down. (aka no tests written for these)


Checklist

  • Does npm test pass with this change (including linting)?
  • Is the new or changed code fully tested?
  • Is a documentation update included (if this change modifies existing APIs, or introduces new ones)?

Sign up for free to join this conversation on GitHub . Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant
- "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
- "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
- 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
- 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
 한국   대만   중국   일본