Skip to content

Commit 98b3802

Browse files
authored
Add test to verify default node filter function (#2756)
1 parent c3f987c commit 98b3802

File tree

4 files changed

+36
-8
lines changed

4 files changed

+36
-8
lines changed

docs/reference/basic-config.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -246,12 +246,15 @@ Type: `function`
246246
Filter that indicates whether a node should be used for a request. Default function definition:
247247

248248
```js
249-
function defaultNodeFilter (node) {
250-
// avoid master only nodes
251-
if (node.roles.master === true &&
252-
node.roles.data === false &&
253-
node.roles.ingest === false) {
254-
return false
249+
function defaultNodeFilter (conn) {
250+
if (conn.roles != null) {
251+
if (
252+
// avoid master-only nodes
253+
conn.roles.master &&
254+
!conn.roles.data &&
255+
!conn.roles.ingest &&
256+
!conn.roles.ml
257+
) return false
255258
}
256259
return true
257260
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
"zx": "7.2.3"
9191
},
9292
"dependencies": {
93-
"@elastic/transport": "^9.0.0",
93+
"@elastic/transport": "^9.0.1",
9494
"apache-arrow": "^18.0.0",
9595
"tslib": "^2.4.0"
9696
},

src/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export interface ClientOptions {
132132
* @defaultValue null */
133133
agent?: HttpAgentOptions | UndiciAgentOptions | agentFn | false
134134
/** @property nodeFilter A custom function used by the connection pool to determine which nodes are qualified to receive a request
135-
* @defaultValue () => true */
135+
* @defaultValue A function that uses the Connection `roles` property to avoid master-only nodes */
136136
nodeFilter?: nodeFilterFn
137137
/** @property nodeSelector A custom function used by the connection pool to determine which node should receive the next request
138138
* @defaultValue A "round robin" function that loops sequentially through each node in the pool. */

test/unit/client.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,31 @@ test('Missing node(s)', t => {
6464
t.end()
6565
})
6666

67+
test('multi nodes with roles, using default node filter', async t => {
68+
const client = new Client({
69+
nodes: [
70+
{
71+
url: new URL('http://node1:9200'),
72+
roles: { master: true, data: false, ingest: false, ml: false }
73+
},
74+
{
75+
url: new URL('http://node2:9200'),
76+
roles: { master: true, data: true, ingest: false, ml: false }
77+
},
78+
]
79+
})
80+
const conn = client.connectionPool.getConnection({
81+
now: Date.now() + 1000 * 60 * 3,
82+
requestId: 1,
83+
name: 'elasticsearch-js',
84+
context: null
85+
})
86+
87+
t.equal(conn?.url.hostname, 'node2')
88+
89+
t.end()
90+
})
91+
6792
test('Custom headers', t => {
6893
const client = new Client({
6994
node: 'http://localhost:9200',

0 commit comments

Comments
 (0)