diff --git a/src/clients/base/base.ts b/src/clients/base/base.ts index e1d6018..3027ae9 100644 --- a/src/clients/base/base.ts +++ b/src/clients/base/base.ts @@ -409,8 +409,8 @@ export class Base extends EventEm // This should never change, but we act defensively here for (const broker of metadata.brokers) { - const { host, port } = broker - brokers.set(broker.nodeId, { host, port }) + const { host, port, rack } = broker + brokers.set(broker.nodeId, { host, port, rack }) } this.#metadata.brokers = brokers @@ -428,7 +428,9 @@ export class Base extends EventEm partitions[rawPartition.partitionIndex] = { leader: rawPartition.leaderId, leaderEpoch: rawPartition.leaderEpoch, - replicas: rawPartition.replicaNodes + replicas: rawPartition.replicaNodes, + isr: rawPartition.isrNodes, + offlineReplicas: rawPartition.offlineReplicas } } diff --git a/src/clients/base/types.ts b/src/clients/base/types.ts index a02bd0f..c0a1119 100644 --- a/src/clients/base/types.ts +++ b/src/clients/base/types.ts @@ -1,4 +1,5 @@ import { type Broker, type ConnectionOptions } from '../../network/connection.ts' +import { type NullableString } from '../../protocol/definitions.ts' import { type Metrics } from '../metrics.ts' export interface TopicWithPartitionAndOffset { @@ -11,6 +12,8 @@ export interface ClusterPartitionMetadata { leader: number leaderEpoch: number replicas: number[] + isr: number[] + offlineReplicas: number[] } export interface ClusterTopicMetadata { @@ -22,7 +25,7 @@ export interface ClusterTopicMetadata { export interface ClusterMetadata { id: string - brokers: Map + brokers: Map topics: Map lastUpdate: number } diff --git a/test/clients/base/sasl-oauthbearer.test.ts b/test/clients/base/sasl-oauthbearer.test.ts index 7514261..d27e08e 100644 --- a/test/clients/base/sasl-oauthbearer.test.ts +++ b/test/clients/base/sasl-oauthbearer.test.ts @@ -50,7 +50,7 @@ test('should connect to SASL protected broker using SASL/OAUTHBEARER', async t = const metadata = await base.metadata({ topics: [] }) - deepStrictEqual(metadata.brokers.get(1), saslBroker) + deepStrictEqual(metadata.brokers.get(1), { ...saslBroker, rack: null }) }) test('should handle authentication errors', async t => { @@ -103,7 +103,7 @@ test('should accept a function as credential provider', async t => { const metadata = await base.metadata({ topics: [] }) - deepStrictEqual(metadata.brokers.get(1), saslBroker) + deepStrictEqual(metadata.brokers.get(1), { ...saslBroker, rack: null }) }) test('should accept an async function as credential provider', async t => { @@ -134,7 +134,7 @@ test('should accept an async function as credential provider', async t => { const metadata = await base.metadata({ topics: [] }) - deepStrictEqual(metadata.brokers.get(1), saslBroker) + deepStrictEqual(metadata.brokers.get(1), { ...saslBroker, rack: null }) }) test('should handle sync credential provider errors', async t => { diff --git a/test/clients/base/sasl.test.ts b/test/clients/base/sasl.test.ts index 266b384..ea8cadf 100644 --- a/test/clients/base/sasl.test.ts +++ b/test/clients/base/sasl.test.ts @@ -49,7 +49,7 @@ for (const mechanism of allowedSASLMechanisms) { const metadata = await base.metadata({ topics: [] }) - deepStrictEqual(metadata.brokers.get(1), saslBroker) + deepStrictEqual(metadata.brokers.get(1), { ...saslBroker, rack: null }) }) test(`${mechanism} - should handle authentication errors`, async t => { @@ -90,7 +90,7 @@ for (const mechanism of allowedSASLMechanisms) { const metadata = await base.metadata({ topics: [] }) - deepStrictEqual(metadata.brokers.get(1), saslBroker) + deepStrictEqual(metadata.brokers.get(1), { ...saslBroker, rack: null }) }) test(`${mechanism} - should accept an async function as credential provider`, async t => { @@ -113,7 +113,7 @@ for (const mechanism of allowedSASLMechanisms) { const metadata = await base.metadata({ topics: [] }) - deepStrictEqual(metadata.brokers.get(1), saslBroker) + deepStrictEqual(metadata.brokers.get(1), { ...saslBroker, rack: null }) }) test(`${mechanism} - should handle sync credential provider errors`, async t => {