-
Notifications
You must be signed in to change notification settings - Fork 25
Unable to read a stream from a follower node #415
Description
🐛 Current behavior
When I add "?nodePreference=follower" to the connection string, I am not able to read from a follower because of error "NotLeaderError"
const readClient = KurrentDBClient.connectionString`kurrentdb+discover://user:[email protected]:2113,dev-02.com:2113,dev-03.com:2113?nodePreference=follower`;
const events = readClient.readStream(sourceStream, {
direction: FORWARDS,
fromRevision: START,
resolveLinkTos: true,
maxCount: EVENT_COUNT,
});cause this error:
/node_modules/@kurrent/kurrentdb-client/dist/utils/convertBridgeError.js:33
return new CommandError_1.NotLeaderError(serviceError);
^
NotLeaderError: NotLeaderError(Endpoint { host: "dev-03.com", port: 2113 })
at convertBridgeError (/node_modules/@kurrent/kurrentdb-client/dist/utils/convertBridgeError.js:33:20)
at convert (/node_modules/@kurrent/kurrentdb-client/dist/streams/readStream.js:53:63)
at async file:///index.js:36:18 {
code: undefined,
_raw: [Error [NotLeaderError]: NotLeaderError(Endpoint { host: "dev-03.com", port: 2113 })] {
metadata: {
'leader-endpoint-host': 'dev-03.com',
'leader-endpoint-port': 2113
}
},
type: 'not-leader',
leader: { address: 'dev-03.com', port: 2113 }
}
and the gossip shows that 3 is indeed the leader even if I asked for the follower:
{
"members": [
{
"instanceId": "b4da8720-57fd-464f-a5fd-8068a0721d45",
"timeStamp": "2025-05-28T16:36:01.5603476Z",
"state": "Leader",
"isAlive": true,
"internalTcpIp": "dev-03.com",
"internalTcpPort": 0,
"internalSecureTcpPort": 1112,
"externalTcpIp": "dev-03.com",
"externalTcpPort": 0,
"externalSecureTcpPort": 1113,
"httpEndPointIp": "dev-03.com",
"httpEndPointPort": 2113,
"lastCommitPosition": 27325351083,
"writerCheckpoint": 27325351391,
"chaserCheckpoint": 27325351391,
"epochPosition": 27318525911,
"epochNumber": 9600,
"epochId": "2926350a-7bb4-45fc-8040-afe60a85faf1",
"nodePriority": 0,
"isReadOnlyReplica": false,
"esVersion": "23.10.1.0"
},
{
"instanceId": "ae2a600e-ed66-4ba3-bc32-bd52c45bc8d1",
"timeStamp": "2025-05-28T16:36:01.5599162Z",
"state": "Follower",
"isAlive": true,
"internalTcpIp": "dev-02.com",
"internalTcpPort": 0,
"internalSecureTcpPort": 1112,
"externalTcpIp": "dev-02.com",
"externalTcpPort": 0,
"externalSecureTcpPort": 1113,
"httpEndPointIp": "dev-02.com",
"httpEndPointPort": 2113,
"lastCommitPosition": 27325351083,
"writerCheckpoint": 27325351391,
"chaserCheckpoint": 27325351391,
"epochPosition": 27318525911,
"epochNumber": 9600,
"epochId": "2926350a-7bb4-45fc-8040-afe60a85faf1",
"nodePriority": 0,
"isReadOnlyReplica": false,
"esVersion": "23.10.1.0"
},
// 01 omitted for message length
],
"serverIp": "dev-03.com",
"serverPort": 2113
}this is true with or without requiresLeader: false, attribute on stream read.
If I remove the param ?nodePreference=follower the read of the stream works as expected with no issues.
🔍 Steps to reproduce
- setup a cluster with at least a leader and a follower node
- read a stream from a follower node using
?nodePreference=followerparameter in connection stream - see error "NotLeaderError"
Reproducible link
💭 Expected behavior
I am able to read a stream from a follower using ?nodePreference=follower in connection string as indicated in kurrent client documentation at https://docs.kurrent.io/clients/grpc/getting-started.html#connection-string
Package version
KurrentDB-NodeJS-Client 1.0.1
KurrentDB Version
EventstoreDB 23.10
Connection string
kurrentdb+discover://user:[email protected]:2113,dev-02.com:2113,dev-03.com:2113?nodePreference=follower
☁️ Deployment Environment
Multi-node cluster (Cloud)
Other Deployment Details
No response
Operating system
No response
Code of Conduct
- I agree to follow this project's Code of Conduct